Builtin fallback inittab
~~~~~~~~~~~~~~~~~~~~~~~~
During normal startup, sninit reads /etc/inittab and initializes its internal
struct config with the data from initab. In case something goes wrong, like
/etc/inittab being unreadable, init dies.

It is possible to have a static initial value for the struct config,
a "built-in inittab", to fall back to if /etc/inittab is unreadable.

The idea is to have some equivalent of sulogin built-in, to give the root
a chance to fix the system manually, possibly calling telinit q later
for another attempt to load inittab.

Unlike sysvinit, sninit does not hardcode sulogin invocation and does not
even treat it as a special case. A regular inittab (with any content
allowed in normal circumstances) can be compiled and linked into sninit
executable to be used as the fallback configuration.


Building init with static inittab
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
First, write the inittab. The syntax is the same as with /etc/inittab.
In fact, it will be parsed using the same routines.

Next, set builtin = path/to/your/inittab in Makefile and rebuild init.

A tool called statictab will be built and used to translate supplied
inittab into C source code (called builtin.c). The code will the be
linked into init executable, replacing a weak NULL as the default
struct config.


Reconfiguring
~~~~~~~~~~~~~
telinit q works as usual, switching init from built-in data to newly
parsed inittab.  Note however init can't drop (munmap) static data
like it's done with old dynamic inittab. No big deal, given typical
inittab size.


Static-only configuration
~~~~~~~~~~~~~~~~~~~~~~~~~
If the ability to reconfigure init on the fly is not needed,
sninit can be built without configuration code at all.

To do so, remove init_conf_*.o from init dependencies in Makefile
and replace them with init_null.o

Static inittab is of course necessary in this case.
